home *** CD-ROM | disk | FTP | other *** search
/ Power Programmierung 2 / Power-Programmierung CD 2 (Tewi)(1994).iso / c / library / dos / diverses / cexpress / strings / wordcont.asm < prev    next >
Encoding:
Assembly Source File  |  1989-05-03  |  1.3 KB  |  50 lines

  1. ;unsigned short  word_count(strg);
  2. ;  char  *strg;
  3.  
  4.     EXTRN  _memory_model:byte
  5.  
  6. _TEXT    SEGMENT BYTE PUBLIC 'CODE'
  7.     ASSUME CS:_TEXT
  8.     PUBLIC _word_count
  9. _word_count proc near
  10.     push ds            ;
  11.     push si            ;
  12.     mov  bx,sp        ;BX points to stack
  13.     cmp  _memory_model,0    ;near or far?
  14.     jle  begin        ;jump if near
  15.     inc  bx            ;else add 2 to BX
  16.     inc  bx            ;
  17. begin:    cmp  _memory_model,2    ;data near or far?
  18.     jb   L0            ;jump if near
  19.     les  si,ss:dword ptr[bx+6] ;point ES:SI to string
  20.     jmp  short L00        ;
  21. L0:    mov  si,[bx+6]        ;near case
  22. L00:    sub  dx,dx        ;clear DX as counter
  23.     cmp  byte ptr[si],0    ;test for null string?
  24.     je   L3            ;quit if null
  25.     mov  al,32        ;AL holds space char
  26. L1:    mov  ah,[si]        ;get a char
  27.     inc  si            ;forward pointer for next time
  28.     cmp  ah,0        ;end of string?
  29.     je   L3            ;
  30.     cmp  ah,al        ;char a space?
  31.     je   L1            ;loop if so
  32.     inc  dx            ;word starts -- inc word counter
  33. L2:    mov  ah,[si]        ;get a char
  34.     inc  si            ;forward pointer for next time
  35.     cmp  ah,0        ;end of string?
  36.     je   L3            ;
  37.     cmp  ah,al        ;char a space?
  38.     je   L1            ;back to spc loop if so
  39.     jmp  short L2        ;else next word char
  40. L3:    mov  ax,dx        ;set return value
  41.     pop  si            ;
  42.     pop  ds            ;
  43.     cmp  _memory_model,0    ;quit
  44.     jle  quit        ;
  45.     db   0CBh        ;RET far
  46. quit:    ret            ;RET near
  47. _word_count ENDP
  48. _TEXT    ENDS
  49.     END
  50.